/*
 * @Author: 孙大大
 * @Date: 2022-04-13 18:43:47
 * @LastEditTime: 2022-04-13 18:43:49
 * @FilePath: \hmmm-xdy\src\permission.js
 */
// 权限拦截 导航守卫 路由守卫  router
import router from "@/router"; // 引入路由实例
import store from "@/store"; // 引入vuex store实例
import NProgress from "nprogress"; // 引入一份进度条插件
import "nprogress/nprogress.css"; // 引入进度条样式

const whiteList = ["/login", "/404"]; // 定义白名单  所有不受权限控制的页面
// let bool = 1
// 路由的前置守卫
router.beforeEach(async function (to, from, next) {
  NProgress.start();
  if (store.getters.token) {
    if (to.path === "/login") {
      next("/");
    } else {
      // TODO: 不一定是getters里面的userId,根据实际情况修改
      if (!store.getters.userId) {
        // await store.dispatch('user/getUserInfo')

        const { roles } = await store.dispatch("user/getUserInfo");
        const routes = await store.dispatch(
          "permission/filterRoutes",
          roles.menus
        );
        // console.log(userAsyncRoutes);

        router.addRoutes([
          ...routes,
          { path: "*", redirect: "/404", hidden: true },
        ]); // 【可以理解异步】

        // console.log(router.options.routes);
        // console.log(routes);
        // if (bool == 1) {
        //   console.log(222222);
        router.options.routes.push(...routes);
        //   bool = 2
        // } else {
        //   console.log(222222);
        //   router.options.routes.push()
        //   bool = 1
        // }

        // router.options.routes.push(...routes)
        next(to.path);
        // next({ ...to, replace: true })  // next(地址)  会让导航重新再来一次，再走一次导航守卫
      } else {
        // let num = (router.options.routes.length - 1) / 2
        //router.options.routes.pop()
        // router.options.routes.splice(num, num - 1)
        // console.log((router.options.routes.length - 1) / 2);
        // location.reload()
        next(); // 直接放行
      }
    }
  } else {
    console.log(22222);
    if (whiteList.includes(to.path)) {
      next();
    } else {
      next("/login"); // 跳到登录页
    }
  }
  NProgress.done();
});
// 后置守卫
router.afterEach(function () {
  // console.log(router);
  NProgress.done(); // 关闭进度条
});
